# -*- coding: utf-8 -*-

from django.db import models
from django.forms import ModelForm
from django.contrib.auth.models import User
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404, redirect
from django.core.mail import send_mail, BadHeaderError
from django.contrib.auth.forms import *
from django.db.models.query_utils import Q
from si_4k.sistema.models import *
from si_4k.sistema.forms import *
from django.contrib.auth.forms import *
from datetime import *
from django.contrib.auth.forms import PasswordChangeForm
from PIL import *
from  django.contrib.auth.decorators import permission_required
from django.core.mail import send_mail
from decimal import *
from django.contrib import messages
from si_4k.xlwt import *

#prefixo = '/home/edu4k/webapps/static_media/'
prefixo = ''

#Funções basicas
def mes_atual():
	data_hoje = datetime.now()
	mes = data_hoje.month
	if data_hoje.day >= 10:
		data = str(data_hoje.year) + '-' + str(data_hoje.month) + '-10'
	else:
		mes_passado = str(data_hoje.month - 1)
		if not mes_passado == 0:
			data = str(data_hoje.year) + '-' + str(mes_passado) + '-10'
		else:
			data = str(data_hoje.year) + '-12-10'
	return data

def duracao_aula(id_aula):
    aula = Aula.objects.get(id=id_aula)
    delta = aula.fim - aula.inicio
    return Decimal(delta.seconds)/3600
    

@permission_required('sistema.perm_controle_entradas_saidas')
def controle_gastos(request):
	ano_inicial = 2009
	ano_atual = datetime.now().year
	lista_gastos = []
	lista_anos = []
	gastos = GastosForm(request.GET)
	while(ano_inicial<=ano_atual):
		lista_gastos.append(Gastos.objects.filter(data__year=ano_inicial))
		ano_inicial += 1
	ano_inicial = 2009
	while(ano_inicial<=ano_atual):
		lista_anos.append(ano_inicial)
		ano_inicial += 1
	if request.method == 'GET':
		gastos = GastosForm()
		return render_to_response('controle_gastos.html', locals(), context_instance=RequestContext(request))
	else:
		gastos = GastosForm(request.POST)
		if gastos.is_valid():
			gastos = gastos.save()
			gastos = GastosForm()
			sucess = True
		return render_to_response('controle_gastos.html', locals(), context_instance=RequestContext(request))


@permission_required('sistema.perm_controle_entradas_saidas')
def historico_entradas(request):
	ano_inicial = 2009
	ano_atual = datetime.now().year
	lista_pagamentos = []
	lista_anos = []
	while(ano_inicial<=ano_atual):
		lista_pagamentos.append(Pagamento.objects.filter(data__year=ano_inicial))
		ano_inicial += 1
	ano_inicial = 2009
	while(ano_inicial<=ano_atual):
		lista_anos.append(ano_inicial)
		ano_inicial += 1
	return render_to_response('historico_entradas.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_controle_entradas_saidas')    
def delete_entrada(request, id_entrada):
    y = Pagamento.objects.get(id=id_entrada)
    y.delete()
    url = reverse('controle_entrada')
    return HttpResponseRedirect(url)

@permission_required('sistema.perm_controle_entradas_saidas')    
def delete_gastos(request, id_gastos):
    x = Gastos.objects.get(id=id_gastos)
    x.delete()
    url = reverse('controle_gastos')
    return HttpResponseRedirect(url)

@permission_required('sistema.perm_controle_entradas')       
def controle_entradas(request):
	lista_divida = Divida.objects.all()
	lista_alunos = Aluno.objects.all()
	data_pagamento = mes_atual()
	for aluno in lista_alunos:
		try:
			pagamento = Pagamento.objects.filter(data = data_pagamento).get(aluno = aluno)
		except:
			pagamento_temp = Pagamento(aluno=aluno, valor = '0', data = data_pagamento, desconto = '0' )
			pagamento = pagamento_temp.save()
	return render_to_response('controle_entradas.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_controle_entradas')     
def ver_aula(request, id_aluno):
	aluno = Aluno.objects.filter(id=id_aluno)
	lista_aula = Aula.objects.filter(aluno=aluno).filter(valido=True)
	return render_to_response('ver_aula.html', locals(), context_instance=RequestContext(request))

@permission_required('sistema.perm_controle_entradas')
def pagamento_aluno(request, id_aluno):
	try:
		aluno = Aluno.objects.get(id=id_aluno)
		divida = Divida.objects.get(aluno=aluno)
		data_hoje = mes_atual()
		pagamento = Pagamento.objects.filter(data=data_hoje).get(aluno=aluno)
		valor_pago = Decimal(request.POST['pagamento'])
		valor_desconto = Decimal(request.POST['desconto'])
		divida.valor -= valor_pago
		divida.save()
		pagamento.valor += valor_pago
		pagamento.desconto += valor_desconto
		pagamento.save()
		marcar_aulas(id_aluno, valor_pago)
		try:
			mensagem = 'Informamos que o aluno ' + divida.aluno.nome + ' realizou um pagamento no valor de R$ ' + str(valor_pago) + ' com sucesso.'
			send_mail('Notificação de pagamento', mensagem, 'financeiro@4keducacional.com.br' ,[aluno.email_1,aluno.email_2], fail_silently=False)
		except:
			pass
		messages.success(request, 'Pagamento realizado com sucesso!')
	except:
		messages.error(request, 'Ocorreu algum problema ao tentar realizar o pagamento, tente novamente.')
	url = reverse('controle_entradas')
	return HttpResponseRedirect(url)

def marcar_aulas(id_aluno, valor_pago):
	aluno = Aluno.objects.get(id=id_aluno)
	lista_status_aulas = StatusAula.objects.filter(pago=False).filter(aluno=aluno).filter(aula__valido=True)
	if aluno.divida.valor < 0:
		valor_pago += -1*(aluno.divida.valor)
	for status_aula in lista_status_aulas:
		aula = status_aula.aula
		preco_aula = aula.valor*duracao_aula(aula.id)
		if valor_pago >= preco_aula:
			valor_pago -= preco_aula
			status_aula.pago = True
			status_aula.save()
	return 

def mes_anterior(request):
    lista_pagamento = Pagamento.objects.filter()
    pagamento = PagamentoForm()
    return render_to_response('mes_anterior.html', locals(), context_instance=RequestContext(request))

def historico_aluno(request, id_aluno):
    aluno = Aluno.objects.get(id=id_aluno)
    lista_aulas = Aula.objects.filter(aluno=aluno).filter(valido=True)
    return render_to_response('historico_aluno.html', locals(), context_instance=RequestContext(request))

def boleto(request, id_aluno):
	aluno = Aluno.objects.get(id=id_aluno)
	boleto_form = DadosBoletoForm()
	return render_to_response('boleto.html', locals(), context_instance=RequestContext(request))
    
#fluxo
@permission_required('sistema.perm_cadastro_aluno')
def fluxo(request):
    return render_to_response('fluxo.html', locals(), context_instance=RequestContext(request))
    
     